#ifndef _SYS_PROCESS_H_
#define _SYS_PROCESS_H_

#include "FanObj.h"
#include "SysTypes.h"

#define PROCESS_VTABLE(self)   ((ProcessVTable*)((FanObj*)self)->vtable)


extern Type*    Process_classType;
extern VTable*  Process_classVTable;


/* [sys::Process] Attributes */
struct Process
{
  FanObj        super;
};


/* [sys::Process] Virtual-table */
typedef struct ProcessVTable
{
  FanObjVTable  super;
} ProcessVTable;


/* [sys::Process] Methods and fields */
void            Process_make_0(Process* self);
void            Process_make_1(Process* self, List* cmd);
void            Process_make(Process* self, List* cmd, File* dir);
List*           Process_command(Process* self);
void            Process_setCommand(Process* self, List* val);
File*           Process_dir(Process* self);
void            Process_setDir(Process* self, File* val);
Bool            Process_mergeErr(Process* self);
void            Process_setMergeErr(Process* self, Bool val);
OutStream*      Process_out(Process* self);
void            Process_setOut(Process* self, OutStream* val);
OutStream*      Process_err(Process* self);
void            Process_setErr(Process* self, OutStream* val);
InStream*       Process_in(Process* self);
void            Process_setIn(Process* self, InStream* val);
Map*            Process_env(Process* self);
Process*        Process_run(Process* self);
Int             Process_join(Process* self);


/* [sys::Process] Type-system functions */
Type*           Process_initType(void);
VTable*         Process_initVTable(void);
void            Process_initStatic(void);


#endif
